# grayspread.net Website Source Code

This is the code powering the [grayspread.net](https://grayspread.net>)
website, which is to date an unpublished WIP. This application uses the
[Lakesuperior](https://notabug.org/scossu/lakesuperior) Linked Data
repository as a back end and can be used as a real-world example on how to use
the [Lakesuperior Python API](
https://lakesuperior.readthedocs.io/en/latest/usage.html#python-api).

[TODO MORE INFO]

## Setup

### Docker Image TBA

A Docker image allowing to avoid all the setup steps listed below may be made
available in the future.

### Clone Repository

It is advised to clone this repo as a subfolder of a dedicated project folder,
e.g.:

```
mkdir grayspread
cd grayspread
git clone <remote> src
```

### Virtualenv

A virtual environment must be installed in order to use the autostart scripts.

Run:

```
python3 -m venv venv
```

in the parent directory of the git repo root.

Install Python Dependencies

Run:

```
cd src
source ./load_env
pip install -r requirements.txt
```

### Environment Setup

Copy `config/.env` to the parent folder of git repo root and change it to fit
your needs.

At the end of this process, you should have the following folder layout:

```
    grayspread/
    |
    `- .env
    |
    `- src/
    |
    `- venv/
```

### iipsrv

IIPImage, or iipsrv, is a high-performance, IIIF-compliant image server.
Grayspread uses it to generate derivatives on the fly.

Clone the `https://github.com/ruven/iipsrv` repository, compile the source
code, and place ``iipsrv.fcgi`` in the ``bin`` directory.

### Nginx

You need an Nginx instance running to serve images via the iipsrv FCGI. Copy
`config/iipsrv.conf` to your Nginx configuration, edit if needed, and start
or reload Nginx.

Any other webserver similarly set up to listen to FCGI should be fine.

### Start Services

The `start.sh` script starts a `multiwatch` process that spawns and
watches multiple `iipsrv` instances, and a Flask process for the web app in
the background.

The `load_env.sh` can be sourced in a separate shell to load the virtual
environment.

### Initial Data Set

An initial data set is provided in the form of CSV files that are parsed by a
conversion script. [TODO Resolve issue with source images]
